package com.ssyt.ec.common.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

/**
 * Alibaba的Fastjson,如果为JAVA Bean,必须有无参构造和getter setter。
 * 
 * @author Hsu。
 * @date 2013-12-2
 */
public class FastjsonUtil {

	private FastjsonUtil() {

	}

	public static <T> List<T> parseArray(String jsonString, Class<T> clazz) {
		return JSON.parseArray(jsonString, clazz);
	}

	public static <T> T parseObject(String jsonString, Class<T> clazz) {
		return JSON.parseObject(jsonString, clazz);
	}

	public static String toJson(Object obj) {
		return JSON.toJSONString(obj);
	}

	public static String toJsonWithDateFormat(Object obj, String dateFormat) {
		return JSON.toJSONStringWithDateFormat(obj, dateFormat,
				SerializerFeature.WriteDateUseDateFormat);
	}

	/**
	 * 读取本地中的JSON
	 * 
	 * @param path
	 * @return
	 */
	public static String readJson(String path) {
		StringBuffer sb = new StringBuffer();
		try {
			// 1、使用File类打开一个文件
			File file = new File(path);
			// 2、通过字节流或字符流的子类，指定输出的位置
			FileInputStream fileInputStream = new FileInputStream(file);

			// 3、进行读/写操作
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = fileInputStream.read(buffer)) != -1) {
				sb.append(new String(buffer, 0, len));
			}
			fileInputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}

	/**
	 * JSON写入本地
	 * 
	 * @param path
	 * @param json
	 * @param fileName
	 */
	public static void writeJson(String path, Object json) {
		try {
			File file = new File(path);
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
			if (!file.exists()) {
				file.createNewFile();
			}
			// 2、通过字节流或字符流的子类，指定输出的位置
			OutputStream outputStream = new FileOutputStream(file, true);

			// 3、进行读/写操作
			outputStream.write(json.toString().getBytes());

			// 4、关闭输入/输出
			outputStream.close();
			// System.out.println("文件写入成功！");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
